package config

import "context"

//source
//// file 、env

//读取配置的参数
type Options struct {
	cfgFile string // 配置文件名，如果有配置，另外的参数不起作用
	cfgPath string // 文件路径，默认为程序当前目录 '.'
	cfgType string // 文件类型，默认为 'json'
	cfgName string // 文件名，  默认为 'config'

	defData     []byte // 默认加载数据，初始化时加载，初始化后取消
	defDataType string // 默认加载数据，默认为'json'

	envPrefix string //环境变量的前缀，默认为"app"
	Context   context.Context
}

// func (options *Options) Set(opts ...Option) {
// 	for _, o := range opts {
// 		o(options)
// 	}
// }

type Option func(*Options)

func newConfigOption() *Options {
	return &Options{
		cfgFile:     "",
		cfgPath:     ".",
		cfgType:     "json",
		cfgName:     "config",
		defDataType: "json",
	}
}

func WithConfigFile(path string, dataType string) Option {
	return func(o *Options) {
		o.cfgFile = path
		o.cfgType = dataType
	}
}

func WithConfigPath(path string) Option {
	return func(o *Options) {
		o.cfgPath = path
	}
}
func WithConfigType(cfgType string) Option {
	return func(o *Options) {
		o.cfgType = cfgType
	}
}
func WithConfigName(cfgName string) Option {
	return func(o *Options) {
		o.cfgName = cfgName
	}
}

func WithDefConfigData(data []byte, dataType string) Option {
	return func(o *Options) {
		o.defData = data
		if dataType == "" {
			o.defDataType = "json"
		} else {
			o.defDataType = dataType
		}

	}
}

//只在初始化时有效
func WithEnvPrefix(prefix string) Option {
	return func(o *Options) {
		o.envPrefix = prefix
	}
}
